#!/usr/bin/perl
#file interrupt.pl
use strict;
my $interruptions = 0;
$SIG{INT} = \&handle_interruptions; # 安装INT处理程序，将 $SIG{INT} 设置为指向子例程的引用
=pod
等价于
$SIG{INT} = sub{
    $interruptions++;
    warn "Dont't interrupt me! .....\n";
}
=cut
while($interruptions < 3){
    print "I'm sleeping.\n";
    sleep 5;
}
print "stop !\n";
sub handle_interruptions{
    $interruptions ++;
    warn "Don't interrupt me! You've already interrupted me ${interruptions}x.\n";
}

=pod
字符串 DEFAULT 用来恢复信号的默认行为。 
如果将 $SIG{INT} = "DEFAULT"; 则int信号取消上述脚本。
字符串 IGNORE 会让信号都被忽略。

kill 和 stop 不能被截取，也不能被忽略，它们的行为将一直被执行，不要用这两个信号处理安装程序。

如果希望使用相同的例程处理不同的信号，则子例程区分信号就比较重要：

$SIG{TERM} = $SIG{HUP} = $SIG{INT} = \&handler;
sub handler{
    my $sig = shift;
    warn "handling a $sig signal\n";
}
=cut